package com.mini.mybatis.executor;

import com.mini.mybatis.mapping.MappedStatement;

import java.sql.SQLException;
import java.util.List;

/**
 * 执行器接口 - 定义SQL执行的核心方法
 */
public interface Executor {
    
    /**
     * 查询操作
     * @param ms 映射语句
     * @param parameter 参数对象
     * @return 查询结果列表
     */
    <E> List<E> query(MappedStatement ms, Object parameter) throws SQLException;
    
    /**
     * 更新操作（包括insert、update、delete）
     * @param ms 映射语句
     * @param parameter 参数对象
     * @return 影响的行数
     */
    int update(MappedStatement ms, Object parameter) throws SQLException;
    
    /**
     * 提交事务
     * @param required 是否必须提交
     */
    void commit(boolean required) throws SQLException;
    
    /**
     * 回滚事务
     * @param required 是否必须回滚
     */
    void rollback(boolean required) throws SQLException;
    
    /**
     * 清理本地缓存
     */
    void clearLocalCache();
    
    /**
     * 关闭执行器
     * @param forceRollback 是否强制回滚
     */
    void close(boolean forceRollback);
    
    /**
     * 检查执行器是否已关闭
     * @return 是否已关闭
     */
    boolean isClosed();
}